home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Die Speccy' 97
/
Die Speccy' 97.iso
/
amiga_system
/
the_aminet
/
dev
/
gui
/
classactdemo.lha
/
ClassAct
/
Examples
/
LayoutTest.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-09-13
|
9KB
|
353 lines
/*************************************************************************
* ClassAct Layout Example
* Copyright ⌐ 1995 Phantom Development Co.
*/
#include <exec/types.h>
#include <exec/memory.h>
#include <intuition/intuition.h>
#include <intuition/gadgetclass.h>
#include <intuition/icclass.h>
#include <libraries/gadtools.h>
#include <graphics/gfxbase.h>
#include <graphics/text.h>
#include <graphics/gfxmacros.h>
#include <utility/tagitem.h>
#include <proto/intuition.h>
#include <proto/graphics.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/diskfont.h>
#include <proto/utility.h>
#include <stdio.h>
#include <gadgets/classact.h>
/*************************************************************************
* Some macro defines...
*/
#define max(x,y) (x > y ? x : y)
#define min(x,y) (x > y ? y : x)
/*************************************************************************
* Gadget GA_ID defines for easy meaningful reference
*/
#define ID_BUTTON1 1L
#define ID_BUTTON2 2L
#define ID_BUTTON3 3L
#define ID_BUTTON4 4L
#define ID_BUTTON5 5L
#define ID_BUTTON6 6L
/*************************************************************************
* Global ClassLibrary Bases for ClassAct
*/
struct ClassLibrary *ButtonBase = NULL;
struct ClassLibrary *LayoutBase = NULL;
/*************************************************************************
* Global pointers to various structures we need...
*/
struct Screen *Scr = NULL;
struct DrawInfo *draw_info;
/*************************************************************************
* Closes all ClassAct gadget bases used in the demo
*/
VOID CloseClassAct(VOID)
{
if(LayoutBase)
{
CloseLibrary((struct Library *)LayoutBase);
if(ButtonBase)
{
CloseLibrary((struct Library *)ButtonBase);
}
}
}
/*************************************************************************
* Opens all ClassAct gadget bases used in the demo
*/
BOOL OpenClassAct(VOID)
{
if(LayoutBase=(struct ClassLibrary *)OpenLibrary("gadgets/layout.gadget",0L))
{
if(ButtonBase=(struct ClassLibrary *)OpenLibrary("gadgets/button.gadget",0L))
{
return(TRUE);
}
}
/* Something failed to open, close down shop.
*/
CloseClassAct();
return(FALSE);
}
/*************************************************************************
* Main Program
*/
int main(argc,argv)
int argc;
char *argv[];
{
struct Window *Win;
LONG ID;
if(!OpenClassAct())
{
Printf("Failed opening ClassAct.\n");
return(20);
}
if(argc > 1)
Scr = LockPubScreen(argv[1]);
else
Scr = LockPubScreen("Workbench");
if (Scr == NULL)
{
/* Shut down, no screen lock
*/
Printf("Failed locking public screen.\n");
CloseClassAct();
return(5);
}
draw_info = GetScreenDrawInfo(Scr);
if(draw_info)
{
struct Gadget *gParent, *layout2, *buttonrow;
/* In this example we will create the layout group before opening
* the window, and size the window to the minimum layout size
* returned by the LayoutLimits() function, then SetGadgetAttr()
* will be used to cause the GREL layout group to resize with the window.
*/
gParent = LayoutObject,
LAYOUT_Orientation, LAYOUT_ORIENT_VERT,
LAYOUT_VertAlignment, LAYOUT_ALIGN_TOP,
LAYOUT_LeftSpacing, INTERWIDTH,
LAYOUT_RightSpacing, INTERWIDTH,
LAYOUT_TopSpacing, INTERHEIGHT,
LAYOUT_BottomSpacing, INTERHEIGHT,
LAYOUT_BevelStyle, BVS_NONE,
LAYOUT_AddChild, LayoutObject,
LAYOUT_Orientation, LAYOUT_ORIENT_HORIZ,
LAYOUT_LeftSpacing, 0,
LAYOUT_RightSpacing, 0,
LAYOUT_TopSpacing, 0,
LAYOUT_BottomSpacing, 0,
LAYOUT_AddChild, LayoutObject,
LAYOUT_Orientation, LAYOUT_ORIENT_HORIZ,
LAYOUT_LeftSpacing, INTERWIDTH,
LAYOUT_RightSpacing, INTERWIDTH,
LAYOUT_TopSpacing, INTERHEIGHT,
LAYOUT_BottomSpacing, INTERHEIGHT,
LAYOUT_BevelStyle, BVS_GROUP,
LAYOUT_Label, "Horizontal",
LAYOUT_LabelPlace, BVJ_TOP_CENTER,
LAYOUT_AddChild, ButtonObject,
GA_ID, ID_BUTTON1,
End,
LAYOUT_AddChild, ButtonObject,
GA_ID, ID_BUTTON2,
End,
LAYOUT_AddChild, ButtonObject,
GA_ID, ID_BUTTON3,
End,
End,
LAYOUT_AddChild, LayoutObject,
LAYOUT_Orientation, LAYOUT_ORIENT_VERT,
LAYOUT_VertAlignment, LAYOUT_ALIGN_TOP,
LAYOUT_LeftSpacing, INTERWIDTH,
LAYOUT_RightSpacing, INTERWIDTH,
LAYOUT_TopSpacing, INTERHEIGHT,
LAYOUT_BottomSpacing, INTERHEIGHT,
LAYOUT_BevelStyle, BVS_GROUP,
LAYOUT_Label, "Vertical",
LAYOUT_LabelPlace, BVJ_TOP_CENTER,
LAYOUT_AddChild, ButtonObject,
GA_ID, ID_BUTTON4,
End,
LAYOUT_AddChild, ButtonObject,
GA_ID, ID_BUTTON5,
End,
LAYOUT_AddChild, ButtonObject,
GA_ID, ID_BUTTON6,
End,
End,
End,
LAYOUT_AddChild, buttonrow = LayoutObject,
LAYOUT_Orientation, LAYOUT_ORIENT_HORIZ,
LAYOUT_VertAlignment, LAYOUT_ALIGN_BOTTOM,
LAYOUT_LeftSpacing, INTERWIDTH,
LAYOUT_RightSpacing, INTERWIDTH,
LAYOUT_TopSpacing, INTERHEIGHT,
LAYOUT_BevelStyle, BVS_SBAR_VERT,
LAYOUT_Label, "Free, Fixed and Weighted sizes.",
LAYOUT_LabelPlace, BVJ_TOP_CENTER,
LAYOUT_ShrinkWrap, FALSE,
LAYOUT_AddChild, ButtonObject,
GA_Text, "25Kg",
End,
CHILD_WeightedWidth, 25,
LAYOUT_AddChild, ButtonObject,
GA_Text, "50Kg",
End,
CHILD_WeightedWidth, 50,
LAYOUT_AddChild, ButtonObject,
GA_Text, "75Kg",
End,
CHILD_WeightedWidth, 75,
LAYOUT_AddChild, ButtonObject,
GA_Text, "100Kg",
End,
CHILD_WeightedWidth, 100,
End,
CHILD_WeightedHeight,0,
LAYOUT_AddChild, LayoutObject,
LAYOUT_Orientation, LAYOUT_ORIENT_HORIZ,
LAYOUT_VertAlignment, LAYOUT_ALIGN_TOP,
LAYOUT_LeftSpacing, INTERWIDTH,
LAYOUT_RightSpacing, INTERWIDTH,
LAYOUT_RightSpacing, INTERWIDTH,
LAYOUT_BottomSpacing, INTERHEIGHT,
LAYOUT_AddChild, ButtonObject,
GA_Text, "Free",
End,
LAYOUT_AddChild, ButtonObject,
GA_Text, "Fixed",
End,
CHILD_WeightedWidth, 0,
LAYOUT_AddChild, ButtonObject,
GA_Text, "Free",
End,
LAYOUT_AddChild, ButtonObject,
GA_Text, "Fixed",
End,
CHILD_WeightedWidth, 0,
End,
CHILD_WeightedHeight,0,
End;
if (gParent)
{
struct LayoutLimits Limits;
struct TextFont *font = OpenFont( Scr->Font );
/* Query parent layout group for min/max layout limits.
*/
LayoutLimits( gParent, &Limits, font );
CloseFont( font );
if (Win = OpenWindowTags(NULL,
WA_Flags, WFLG_DEPTHGADGET | WFLG_DRAGBAR |
WFLG_CLOSEGADGET | WFLG_ACTIVATE | WFLG_SIZEGADGET,
WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW |
IDCMP_GADGETUP | IDCMP_IDCMPUPDATE,
WA_Top, 20,
WA_Left, 20,
WA_InnerWidth, Limits.MinWidth,
WA_InnerHeight, Limits.MinHeight,
WA_SmartRefresh, TRUE,
WA_PubScreen, Scr,
WA_Title, "ClassAct layout.gadget Example",
WA_ScreenTitle, "ClassAct Copyright 1995 Phantom Development LLC.",
TAG_END))
{
ULONG wsig = 1L << Win->UserPort->mp_SigBit;
struct IntuiMessage *msg;
BOOL done = FALSE;
WORD BorderWidth = Win->BorderLeft + Win->BorderRight;
WORD BorderHeight = Win->BorderTop + Win->BorderBottom;
WindowLimits(Win,
Limits.MinWidth + BorderWidth,
Limits.MinHeight + BorderHeight,
Limits.MaxWidth + BorderWidth,
Limits.MaxHeight + BorderHeight);
SetGadgetAttrs( gParent, NULL, NULL,
GA_Top, Win->BorderTop,
GA_Left, Win->BorderLeft,
GA_RelWidth, -BorderWidth,
GA_RelHeight, -BorderHeight,
ICA_TARGET, ICTARGET_IDCMP,
TAG_END);
AddGadget(Win, gParent, -1);
RefreshGList(gParent, Win, NULL, 1);
while (done == FALSE)
{
ULONG sig = Wait(wsig | SIGBREAKF_CTRL_C);
if (sig & wsig)
{
while (msg = (struct IntuiMessage *) GetMsg(Win->UserPort))
{
switch (msg->Class)
{
case IDCMP_CLOSEWINDOW:
done = TRUE;
break;
case IDCMP_IDCMPUPDATE:
{
USHORT code;
if (!FindTagItem(LAYOUT_RelVerify, msg->IAddress))
break;
code = GetTagData(LAYOUT_RelCode, 0, msg->IAddress);
switch (GetTagData(GA_ID, 0, msg->IAddress))
{
case ID_BUTTON1:
break;
case ID_BUTTON2:
break;
case ID_BUTTON3:
break;
case ID_BUTTON4:
break;
case ID_BUTTON5:
break;
case ID_BUTTON6:
break;
default:
break;
}
}
break;
default:
break;
}
ReplyMsg((struct Message *) msg);
}
}
else if (sig & SIGBREAKF_CTRL_C)
{
done = TRUE;
}
}
RemoveGadget(Win, gParent);
CloseWindow(Win);
}
DisposeObject(gParent);
}
FreeScreenDrawInfo(Win->WScreen, draw_info);
}
UnlockPubScreen(0, Scr);
CloseClassAct();
}